<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * 任务分为同步任务(js执行栈/回调栈执行)和异步任务
         * 
         * 异步任务又分为  宏任务和微任务
         * 
         * 宏任务 是由宿主(浏览器、Node)发起
         * 
         * 微任务 是由JS引擎发起的任务
         * **/ 




        /**
         * 微任务 是由JS引擎发起的任务
         * process.nectTick
         * Promise.then() catch()
         * Async/Await，----- // async 本身是同步的，除非遇到了await，后面的代码就是异步的
         * Object.observe等等
         * **/  



        /**
         * 宏任务(宿主环境)
         * script(代码块)
         * setTimeout/setInterval
         * setImmediate
         * **/ 

        // 执行顺序  1、同步任务 2、微任务 3、宏任务


        // 注意所有的代码都是在script 这一个大的宏任务里面执行的

        // 题目1
        // console.log(1);

        // setTimeout(()=>{
        //     console.log(2);
        // },0)

        // const p = new Promise((resolve,reject)=>{
        //     console.log(3);
        //     resolve(1000)
        //     console.log(4);
        // })

        // p.then(data=>{
        //     console.log(data);
            
        // })
        // console.log(5);
        
        // 打印结果 1、3、4、5、1000、2

        // 题目2
        // new Promise((resolve,reject)=>{
        //     resolve(1)

        //     new Promise((resolve,reject)=>{
        //         resolve(2)
        //     }).then(data =>{
        //         console.log(data);
        //     })
        // }).then(data=>{
        //     console.log(data);
        // })
        // console.log(3);

        // 打印结果 3、2、1


        // 题目三
        // console.log(11);
        // setTimeout(()=>{
        //     console.log(12);
        //     let p = new Promise(resolve=>{
        //         resolve(13)
        //     })
        //     p.then(res=>{
        //         console.log(res);
        //     })
        //     console.log(15);
        // },0)
        // console.log(14);

        // 打印结果 11、14、12、15、13

        // 题目四
        // setTimeout(()=>{
        //     console.log(1);
        // },0)

        // new Promise((resolve,reject)=>{
        //     console.log(2); // 同步任务
        //     resolve('p1')
        //     new Promise((resolve,reject)=>{
        //         console.log(3); // 同步任务
        //         setTimeout(()=>{
        //             resolve('setTimeout2')
        //             console.log(4);
        //         },0)
        //         resolve('p2')
        //     }).then(data=>{
        //         console.log(data);
        //     })
        //     setTimeout(() => {
        //         resolve('setTimeout1')
        //         console.log(5);
                
        //     }, 0);
        // }).then(data=>{
        //     console.log(data);
        // })
        // console.log(6);

        //打印结果 2、3、6、p2、p1、1、4、5


        // 题目五-- 今日头条
        // async function async1(){ // async 本身是同步的，除非遇到了await后面的代码就是异步的
        //     console.log('async1 start');
        //     await async2()
        //     console.log('async1 end');
        // }

        // async function async2() {
        //     console.log('async2');
        // }

        // console.log('script start');
        
        // setTimeout(function(){
        //     console.log('setTimeout');
        // },0)
        // async1()

        // script start, async1 start,async1 end ,async2,setTimeout
    </script>
</body>
</html>